import javax.swing.*;
import java.util.*;
import java.awt.Font;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JScrollPane;
import javax.swing.border.EmptyBorder;

public class VueSaisieParution extends Vue {

	private static final long serialVersionUID = 1L;
	
	private JPanel contentPane;	
	private JTextField textFieldIssn;		//issn du periodique
	private JTextField textFieldTitrePe;	//nom du periodique
	private JTextField textFieldId;			//nom de la parution
	private JTextField textFieldNb;			//nombre de parution du periodique
	private JTextField textFieldPage;		//page de l'article
	private JTextField textFieldTitre;		//titre de l'article
	private JTextField txtNom;				//nom de l'auteur
	private JTextField txtPrenom;			//prenom de l'auteur
	private JComboBox comboBoxMot;			//combobox des mot-cles
	private JTextArea textAreaParution;		//liste des parutions du periodique
	private JTextArea textAreaArticle;		//liste des articles de la parution
	
	private JButton btnAjouterLeMot;
	private JButton btnAjouterLauteur;
	private JButton btnAjouter;
	private JButton btnEnregistrer;
	private JButton btnContinuer;
	private JButton buttonRech_1;
	private JButton buttonAnnRech;
	
	private Periodique _periodique = null;	//le periodique qu'on observe
	private Parution _parution = null;		//la parution qu'on ajoute
	private Article _article = null; 		//l'article qu'on est en train d'enregistrer
	
	public VueSaisieParution(Controleur controleur) {
		super(controleur);
		setTitle("Enregistrement d'une nouvelle parution de periodique");
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
		setBounds(100, 100, 540, 767);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);	
		
		JLabel lblNewLabel = new JLabel("ISSN");
		lblNewLabel.setBounds(54, 37, 61, 15);
		contentPane.add(lblNewLabel);
		
		textFieldIssn = new JTextField();
		textFieldIssn.setBounds(110, 35, 114, 19);
		contentPane.add(textFieldIssn);
		textFieldIssn.setColumns(10);

//Rechercher
		buttonRech_1 = new JButton("Rechercher");
		buttonRech_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String issn = textFieldIssn.getText();
				setPeriodique(getControleur().rechPeriodique(issn));
			}
		});
		buttonRech_1.setBounds(283, 33, 107, 25);
		contentPane.add(buttonRech_1);

//Annuler
		buttonAnnRech = new JButton("Annuler");
		buttonAnnRech.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				setEtat(initiale);
			}
		});
		buttonAnnRech.setBounds(413, 32, 107, 25);
		contentPane.add(buttonAnnRech);
		
		JLabel lblTitre = new JLabel("Titre");
		lblTitre.setBounds(54, 66, 61, 15);
		contentPane.add(lblTitre);
		
		textFieldTitrePe = new JTextField();
		textFieldTitrePe.setEditable(false);
		textFieldTitrePe.setBounds(110, 64, 114, 19);
		contentPane.add(textFieldTitrePe);
		textFieldTitrePe.setColumns(10);
		
		JLabel lblIdParution = new JLabel("Nouveau");
		lblIdParution.setBounds(32, 255, 61, 15);
		contentPane.add(lblIdParution);
		
		textFieldId = new JTextField();
		textFieldId.setText("nom parution");
		textFieldId.setEditable(false);
		textFieldId.setColumns(10);
		textFieldId.setBounds(110, 253, 114, 19);
		contentPane.add(textFieldId);
		
		JSeparator separator = new JSeparator();
		separator.setBounds(88, 326, 358, 2);
		contentPane.add(separator);
		
		JLabel lblParutions = new JLabel("Articles");
		lblParutions.setFont(new Font("Dialog", Font.BOLD | Font.ITALIC, 12));
		lblParutions.setBounds(223, 340, 97, 15);
		contentPane.add(lblParutions);
		
		JLabel lblNombreDeParutions = new JLabel("Parutions");
		lblNombreDeParutions.setBounds(32, 97, 61, 15);
		contentPane.add(lblNombreDeParutions);
		
		textFieldNb = new JTextField();
		textFieldNb.setEditable(false);
		textFieldNb.setColumns(10);
		textFieldNb.setBounds(110, 93, 49, 19);
		contentPane.add(textFieldNb);
		
		JScrollPane scrollPaneParution = new JScrollPane();
		scrollPaneParution.setBounds(110, 124, 399, 96);
		contentPane.add(scrollPaneParution);
		
		textAreaParution = new JTextArea();
		textAreaParution.setEditable(false);
		textAreaParution.setEnabled(false);
		scrollPaneParution.setViewportView(textAreaParution);

//fermer
		JButton buttonFermer_1 = new JButton("Fermer");
		buttonFermer_1.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().fermerSaisieParution(_periodique, _parution, _article);
			}
		});
		buttonFermer_1.setBounds(261, 699, 107, 25);
		contentPane.add(buttonFermer_1);

//continuer
		btnContinuer = new JButton("Continuer");
		btnContinuer.setEnabled(false);
		btnContinuer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String nom = textFieldId.getText();
				setParution(getControleur().nouvParution(getPeriodique(), nom));
				initArticle(getParution());
			}
		});
		btnContinuer.setBounds(283, 250, 107, 25);
		contentPane.add(btnContinuer);
		
		JSeparator separator_1 = new JSeparator();
		separator_1.setBounds(110, 670, 300, 2);
		contentPane.add(separator_1);
		
		JScrollPane scrollPaneArticle = new JScrollPane();
		scrollPaneArticle.setBounds(69, 375, 399, 93);
		contentPane.add(scrollPaneArticle);
		
		textAreaArticle = new JTextArea();
		scrollPaneArticle.setViewportView(textAreaArticle);
		textAreaArticle.setEditable(false);
		
		textFieldPage = new JTextField();
		textFieldPage.setEditable(false);
		textFieldPage.setColumns(10);
		textFieldPage.setBounds(110, 519, 114, 19);
		contentPane.add(textFieldPage);
		
		textFieldTitre = new JTextField();
		textFieldTitre.setEditable(false);
		textFieldTitre.setColumns(10);
		textFieldTitre.setBounds(110, 490, 114, 19);
		contentPane.add(textFieldTitre);
		
		JLabel lblTitre_1 = new JLabel("Titre");
		lblTitre_1.setBounds(54, 492, 61, 15);
		contentPane.add(lblTitre_1);
		
//enregistrer
		btnEnregistrer = new JButton("Enregistrer");
		btnEnregistrer.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				getControleur().nouvParution(getParution());
			}
		});
		btnEnregistrer.setEnabled(false);
		btnEnregistrer.setBounds(142, 699, 107, 25);
		contentPane.add(btnEnregistrer);

//ajouter l'article
		btnAjouter = new JButton("Ajouter l'article");
		btnAjouter.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				_article.setTitre(textFieldTitre.getText());
				_article.setPage(textFieldPage.getText());
				getControleur().nouvArticle(getParution(), getArticle());
			}
		});
		btnAjouter.setEnabled(false);
		btnAjouter.setBounds(379, 619, 141, 25);
		contentPane.add(btnAjouter);	
		
		txtNom = new JTextField();
		txtNom.setText("nom");
		txtNom.setEditable(false);
		txtNom.setColumns(10);
		txtNom.setBounds(110, 546, 114, 19);
		contentPane.add(txtNom);
		
		txtPrenom = new JTextField();
		txtPrenom.setText("prenom");
		txtPrenom.setEditable(false);
		txtPrenom.setColumns(10);
		txtPrenom.setBounds(238, 546, 114, 19);
		contentPane.add(txtPrenom);

//ajouter l'auteur
		btnAjouterLauteur = new JButton("Ajouter l'auteur");
		btnAjouterLauteur.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String nom = txtNom.getText(); String prenom = txtPrenom.getText();
				getControleur().nouvAuteur(nom, prenom, getArticle());
				txtPrenom.setText("");
				txtNom.setText("");
			}
		});
		btnAjouterLauteur.setEnabled(false);
		btnAjouterLauteur.setBounds(379, 545, 141, 25);
		contentPane.add(btnAjouterLauteur);
			
		JLabel lblMotcle = new JLabel("Mot-cle");
		lblMotcle.setBounds(54, 582, 61, 15);
		contentPane.add(lblMotcle);
		
		comboBoxMot = new JComboBox();
		comboBoxMot.setEnabled(false);
		comboBoxMot.setBounds(110, 577, 114, 24);
		contentPane.add(comboBoxMot);

//ajouter le mot-cle		
		btnAjouterLeMot = new JButton("Ajouter le mot");
		btnAjouterLeMot.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				String val = (String)comboBoxMot.getSelectedItem();
				getControleur().nouvMotcle(val, getArticle());
			}
		});
		btnAjouterLeMot.setEnabled(false);
		btnAjouterLeMot.setBounds(379, 582, 141, 25);
		contentPane.add(btnAjouterLeMot);
		
		JLabel lblPage = new JLabel("Page");
		lblPage.setBounds(54, 521, 61, 15);
		contentPane.add(lblPage);
		
		JLabel lblAuteur = new JLabel("Auteur");
		lblAuteur.setBounds(54, 548, 61, 15);
		contentPane.add(lblAuteur);
	} // fin affichage

//methodes
	
	private Periodique getPeriodique() { return _periodique; }
	private void setPeriodique(Periodique pe) { _periodique = pe; }
	
	private Parution getParution() { return _parution; }
	private void setParution(Parution pa) { _parution = pa; }

	private Article getArticle() { return _article; }
	public void initArticle(Parution pa) { _article = new Article(pa); }
	
	/*alimente la liste des parutions*/
	public void alimente(Periodique pe) {
		textFieldTitrePe.setText(pe.getNom());
		textFieldNb.setText(String.valueOf(pe.getNbParutions()));
		textAreaParution.setText("");
		int i = 1;
		for (Parution parution : pe.getParutions()) {
			  textAreaParution.append( i + "    " + String.valueOf(parution.getNumero()) + "\n");
			  i++;
		}
	}
	
	/*alimente la combobox des mots-cles*/
	public void alimente(HashSet<MotCle> mots) {
			if (mots==null)
			{ 
				Message dialog = new Message("La liste de mots-cles est vide :/");
				dialog.setVisible(true);
			}
			else
			{
				for (MotCle m : mots) comboBoxMot.addItem(m.getMot());
			}
	}
	
	/*alimente la liste des articles*/
	public void alimente(Parution parution) { //il faudra ajouter les auteurs et les mot-cles
		textAreaArticle.setText(""); 
		
		for (Article article : parution.getArticles()) {
			textAreaArticle.append(String.valueOf(article.getPage()) + "    " + article.getTitre() + "    " + article.getAuteur() + "\n");
		}
	}
	
	public void setEtat (int etat){
		switch (etat) {
		case initiale: {
			textFieldIssn.setText("");
			textFieldIssn.setEditable(true);
			textFieldTitrePe.setText("");
			textFieldNb.setText("");
			textAreaParution.setText("");

			textFieldId.setText("nom parution");
			textFieldId.setEditable(false);
			btnContinuer.setEnabled(false);
			break;
			}
		case inter1: {
			textFieldIssn.setEditable(false);
			textFieldId.setEditable(true);
			btnContinuer.setEnabled(true);
			break;
			}
		case inter2: {
			buttonAnnRech.setEnabled(false);
			buttonRech_1.setEnabled(false);
			btnContinuer.setEnabled(false);
			
			btnAjouterLauteur.setEnabled(true);
			btnAjouterLeMot.setEnabled(false);
			btnAjouter.setEnabled(false);
			
			textFieldId.setEditable(false);
			textFieldTitre.setEditable(true);
			textFieldPage.setEditable(true);
			txtNom.setEditable(true);
			txtPrenom.setEditable(true);
			
			comboBoxMot.setEnabled(true);
			break;
		}
		case inter3: {
			btnAjouterLeMot.setEnabled(true);
			break;
		}
		case inter4: {
			btnAjouter.setEnabled(true);
			break;
		}
		case finale: {
			setEtat(inter2);
			btnEnregistrer.setEnabled(true);
			break;
		}
		} //fin Switch
	} //fin SetEtat
} //fin Vue

